<?php

namespace App\Admin\Actions\Form;

use App\Models\Order;
use Dcat\Admin\Actions\Response;
use Dcat\Admin\Grid\RowAction;
use Dcat\Admin\Traits\HasPermissions;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;

class OrderFinishActions extends RowAction
{
    /**
     * 按钮标题
     *
     * @return string
     */
    protected $title = '   <i class="feather icon-check-circle text-custom"></i> <span class="text-custom" title="">确认完成</span> &emsp;';

    /**
     * 处理请求，如果不需要接口处理，请直接删除这个方法
     *
     * @param Request $request
     *
     * @return Response
     */
    public function handle(Request $request)
    {
        // 获取主键
        $key = $this->getKey();
        $order = Order::where('id', $key)->first();
        if ($order->pay_status == 0) {
            return $this->response()->error('订单未支付，无法完成');
        }
        if ($order->order_status == -1) {
            return $this->response()->error('订单已取消，无法完成');
        }
        $order->order_status = 2;
        $order->save();
        return $this->response()
            ->success('完成')
            ->refresh();
    }

    /**
     * 如果只是a标签跳转，则在这里返回跳转链接即可
     *
     * @return string|void
     */
    protected function href()
    {
        // 获取主键
        $key = $this->getKey();

        // 获取当前页其他字段
        $username = $this->row->username;

        // return admin_url('auth/users');
    }

    // 如果你想自定义动作按钮的HTML，可以重写此方法
    public function html()
    {
        // $this->setHtmlAttribute(['style' => 'padding-right:20px']);
        return parent::html();
    }

    /**
     * 确认弹窗信息，如不需要可以删除此方法
     *
     * @return string|array|void
     */
    public function confirm()
    {
        return ['确认完成了该订单?'];
    }

    /**
     * 权限判断，如不需要可以删除此方法
     *
     * @param Model|Authenticatable|HasPermissions|null $user
     *
     * @return bool
     */
    protected function authorize($user): bool
    {
        return true;
    }

    /**
     * 返回请求接口的参数，如不需要可以删除此方法
     *
     * @return array
     */
    protected function parameters()
    {
        return [];
    }
}
